package com.bst.bsj.bops.web.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.bst.bsj.base.controller.WebBaseController;
import com.bst.bsj.bops.web.biz.MerchantRoleService;
import com.bst.bsj.bops.web.biz.MerchantService;
import com.bst.bsj.bops.web.biz.RoleService;
import com.bst.bsj.common.dal.dataobject.Merchant;
import com.bst.bsj.common.dal.dataobject.MerchantRole;
import com.bst.bsj.common.dal.dataobject.Role;
import com.bst.bsj.common.maopu.enums.MemberStatus;
import com.bst.bsj.portal.util.StringUtil;
import com.homewaimai.common.lang.MD5Util;
import com.homewaimai.common.lang.Paginator;
import com.homewaimai.common.lang.Result;

/**
* @Title: MechantController.java
* @Package com.bst.bsj.bops.web.controller
* @Description: 系统用户管理
* @author yj
* @date 2016年4月5日 下午1:35:29
* @version V1.0
* Copyright (c) 2015, 博思堂博视界.
 */
@Scope("prototype")
@Controller
@RequestMapping(value = "/bops/sys/merchant")
@SuppressWarnings("unchecked")
public class MechantController extends WebBaseController {

  @Autowired
  private MerchantService merchantService;

  @Autowired
  private RoleService roleService;

  @Autowired
  private MerchantRoleService merchantRoleService;

  /**
   * 
  * @Title: merchant
  * @Description: 获取用户列表和role列表
  * @param req
  * @param resp
  * @return
  * @throws Exception
  * ModelAndView
  * @throws 
  * @creator     :yj
  * @create date :2016年4月6日 上午11:00:06
  * @modificator :yj
  * @modify date :2016年4月6日 上午11:00:06
   */

  @RequestMapping(value = "/staff")
  public ModelAndView merchant(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    Map<String, Object> params = getBopsParams(req);
    Map<String, Object> paramsMap = new HashMap<String, Object>();
    ModelAndView modelAndView = getBopsModelAndView("privilege/staff");

    String userName=(String)params.get("userName");
    String mobile=(String)params.get("mobile");
     if(StringUtil.isNotBlank(userName)){
       paramsMap.put("userName", userName);
     }
     if(StringUtil.isNotBlank(mobile)){
       paramsMap.put("mobile", mobile);
     }
    
    Integer pageNum = 0;
    String pageNums = (String) params.get("pageNum");
    if (StringUtil.isNumeric(pageNums)) {
      pageNum = Integer.valueOf(pageNums);
    }

    if (pageNum == null || pageNum == 0) {
      pageNum = 1;
    }
    paramsMap.put("page", pageNum);
    paramsMap.put("length", 10);
    paramsMap.put("offset", new Long((pageNum - 1) * 10));
    Result result = merchantService.query(paramsMap);

    // 如果请求成功
    if (result.isSuccess()) {
      // 得到分页器
      Paginator paginator = (Paginator) result.getModels().get("paginator");
      // 得到数据
      List<Merchant> merchantList = (List<Merchant>) result.getModels().get("merchantList");
      modelAndView.addObject("merchantList", merchantList);
      modelAndView.addObject("paginator", paginator);
    }

    //获取所有role
    paramsMap.clear();
    paramsMap.put("status", 1);
    List<Role> roleList = roleService.selectRoles(paramsMap);

    modelAndView.addObject("roleList", roleList);
    modelAndView.addObject("params", params);
    return modelAndView;
  }

  /**
  * @Title: merchantdelete
  * @Description: 编辑员工状态
  * @param req
  * @param resp
  * @throws Exception
  * void
  * @throws 
  * @creator     :yj
  * @create date :2016年4月5日 下午3:42:55
  * @modificator :yj
  * @modify date :2016年4月5日 下午3:42:55
   */
  @RequestMapping(value = "/changeStatus")
  @ResponseBody
  public String changeStatus(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    Map<String, Object> params = getBopsParams(req);

    Merchant merchant = new Merchant();
    String id = (String) params.get("id");
    String status = (String) params.get("status");
      if("ON".equals(status)){
        status=MemberStatus.ON.getCode();
      }else{
        status=MemberStatus.DEPOSE.getCode();
      }
    if (StringUtil.isNumeric(id)) {
      merchant.setId(Long.valueOf(id));
      merchant.setStatus(status);
      merchantService.update(merchant);
      return "success";
    }
      return "error";
  }

  /**
  * @Title: exist
  * @Description: 判断用户是否已经注册
  * @return
  * @throws Exception
  * Boolean
  * @throws 
  * @creator     :yj
  * @create date :2016年4月5日 下午4:35:20
  * @modificator :yj
  * @modify date :2016年4月5日 下午4:35:20
   */
  @RequestMapping(value = "/exist")
  @ResponseBody
  public Boolean exist(String mobile,Long id) throws Exception {

    if (StringUtil.isNotBlank(mobile)) {
      Merchant merchant = merchantService.selectByMobile(mobile);
      if (merchant == null) {
        return true;
      }else{
         if(id!=null){
           Long mid=merchant.getId();
            if(mid.equals(id)){
              return true;
            }
         }
      }
    }
    return false;
  }

  /**
  * @Title: saveOrupdate
  * @Description:保存或更新
  * @param req
  * @param resp
  * @throws Exception
  * void
  * @throws 
  * @creator     :yj
  * @create date :2016年4月5日 下午3:57:45
  * @modificator :yj
  * @modify date :2016年4月5日 下午3:57:45
   */
  @RequestMapping(value = "/save")
  @ResponseBody
  public String saveOrupdate(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    Map<String, Object> params = getBopsParams(req);

    String userName = (String) params.get("userName");
    String mobile = (String) params.get("mobile");
    String roleIdStr = (String) params.get("roleId");

    String idStr = (String) params.get("id");
    Long id = null;
    Long roleId=null;
    if(StringUtil.isNotBlank(idStr)){
      id=Long.parseLong(idStr);
    }
    if(StringUtil.isNotBlank(roleIdStr)){
      roleId=Long.parseLong(roleIdStr);
    }

    if(!exist(mobile,id)){
      return "hasUser";  //手机已注册
    }
    
    Merchant merchant = new Merchant();
    merchant.setUserName(userName);
    merchant.setMobile(mobile);

    if(id==null){ 
        MerchantRole mr=new MerchantRole();
        mr.setRoleId(roleId);
        merchant.setStatus(MemberStatus.ON.getCode());
        merchant.setPassword(MD5Util.getMD5(mobile)); //默认密码为手机号
        Long sid=merchantService.save(merchant);      
        if(sid!=null){
        mr.setMerchantId(sid);
        merchantRoleService.save(mr);
        }

    }else{
      merchant.setId(id);
      merchantService.update(merchant); //更新
      merchantRoleService.update(id, roleId);
    }

    return "success";
  }

  /**
  * @Title: modPasswd
  * @Description: 修改密码
  * @param req
  * @param resp
  * @return
  * @throws Exception
  * String
  * @throws 
  * @creator     :yj
  * @create date :2016年5月21日 上午11:26:24
  * @modificator :yj
  * @modify date :2016年5月21日 上午11:26:24
   */
  @RequestMapping(value = "/modPasswd")
  @ResponseBody
  public String modPasswd(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    Map<String, Object> params = getBopsParams(req);
    String idStr=(String)params.get("id");
    String password=(String)params.get("password");
    
    if(StringUtil.isBlank(idStr)||StringUtil.isBlank(password)){
      return "error";
    }
    Long id = null;
    if(StringUtil.isNotBlank(idStr)){
      id=Long.parseLong(idStr);
    }
    Merchant merchant = new Merchant();
    merchant.setId(id);
    merchant.setPassword(MD5Util.getMD5(password));
    merchantService.update(merchant); //更新
    
    return "success";
  }
  
  
}
